// never 类型表示的是用不存在的值的类型。
function error(message: string): never {
  throw new Error(message);
}


function infiniteLoop(): never {
  while (true) {
  }
}

// // never类型是那些 总是会抛出异常 或 根本不会有返回值的函数表达式或箭头函数表达式 的返回值类型
// console.log(error("123"));
// console.log(infiniteLoop());

// 在 Typescript 中，可以利用 never 类型的特性实现全面性检查

type Foo = string | number;

// // 假设你未经审核修改了 Foo 的类型，例如增加了一个类型 boolean
// type Foo = string | number | boolean;
// // 此时下面的 check 代码就会报错，因为 foo 未被局限为 never 类型

function controlFlowAnalysisWithNever(foo: Foo) {
  if (typeof foo === "string") {
    // 这里 foo 被收窄为 string 类型
  }
  else if (typeof foo === "number") {
    // 被收窄为 number 类型
  }
  else {
    // foo 这里是 never
    const check: never = foo;
  }
}

// 使用 never 避免出现新增了联合类型没有对应的实现，目的就是写出类型绝对安全的代码.